﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Day04
{
    public abstract class DaoFactory
    {

        //public static IUserDao UserDao
        //{
        //    get
        //    {
        //        if (GameMain.Type == "Client")
        //        {
        //            return new ClientUserDao();
        //        }
        //        else
        //        {
        //            return new ServerUserDao();
        //        }

        //    }
        //}
        //将创建具体数据访问对象的代码，推迟到子类完成
        private static DaoFactory instance;
        /// <summary>
        /// 
        /// </summary>
        public static DaoFactory Instance
        {
            //选择客户端 还是 服务端
            get
            {
                //    if (GameMain.Type == "Client")
                //    {
                //        return new ClientDaoFactory();
                //    }
                //    else
                //    {
                //        return new ServerDaoFactory();
                //    }
                ////现存问题：增加新的数据访问方式，需要修改工厂类代码,违背开放-关闭原则；用反射解决

                if (instance==null)//缓存，不让每次都创建
                {
                    //具体工厂命名规范——格式："Day04."+GameMain.Type+"DaoFactory"
                    Type type = Type.GetType("Day04." + GameMain.Type + "DaoFactory");//以后只需要改变GameMain.Type的值即可
                    instance = Activator.CreateInstance(type) as DaoFactory;//反射创建对象
                }
                return instance;
            }
        }
        public abstract IUserDao UserDao
        {
            get;
        }
        public abstract IWeaponDao WeaponDao
        {
            get;
        }
    }
}